#ifndef CLOG_H
#define CLOG_H

#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @file clog.h
 * @brief 集中式日志管理系统客户端动态库
 * @version 1.0
 * @author Log System Team
 * @date 2025-06-26
 */

/**
 * @brief 日志级别枚举
 */
typedef enum {
    CLOG_INFO = 0,      /**< 信息级别 */
    CLOG_DEBUG = 1,     /**< 调试级别 */
    CLOG_WARNING = 2,   /**< 警告级别 */
    CLOG_ERROR = 3      /**< 错误级别 */
} clog_level_t;

/**
 * @brief 初始化日志系统
 * @details 必须在使用任何日志功能前调用此函数
 * @return 0 成功，-1 失败
 */
int clog_init(void);

/**
 * @brief 清理日志系统资源
 * @details 程序结束前调用此函数清理资源
 */
void clog_cleanup(void);

/**
 * @brief 发送日志消息
 * @param level 日志级别
 * @param format 格式化字符串
 * @param ... 可变参数
 * @return 0 成功，-1 失败
 */
int clog_send(clog_level_t level, const char* format, ...);

/**
 * @brief 手动刷新日志缓存
 * @details 立即将缓存中的日志发送到服务器
 * @return 0 成功，-1 失败
 */
int clog_flush(void);

/**
 * @brief 检查日志系统是否已初始化
 * @return 1 已初始化，0 未初始化
 */
int clog_is_initialized(void);

/**
 * @brief 获取当前进程名
 * @param buffer 输出缓冲区
 * @param size 缓冲区大小
 * @return 0 成功，-1 失败
 */
int clog_get_process_name(char* buffer, size_t size);

/**
 * @brief 设置配置文件路径
 * @param config_path 配置文件路径
 * @return 0 成功，-1 失败
 */
int clog_set_config_path(const char* config_path);

/* 便捷宏定义 - 自动处理初始化 */
#define LOGI(format, ...) clog_send(CLOG_INFO, format, ##__VA_ARGS__)
#define LOGD(format, ...) clog_send(CLOG_DEBUG, format, ##__VA_ARGS__)
#define LOGW(format, ...) clog_send(CLOG_WARNING, format, ##__VA_ARGS__)
#define LOGE(format, ...) clog_send(CLOG_ERROR, format, ##__VA_ARGS__)

#ifdef __cplusplus
}
#endif

#endif // CLOG_H
